The present invention relates generally to the use of serial buses as a means of communication between electronic devices and, in particular, to the modification and use of configuration memory used during the operation of a serial bus, such as a serial bus operating in conformance with the IEEE 1394 Serial Bus standard.
Computer systems are typically comprised of a variety of different components or xe2x80x9cdevicesxe2x80x9d that operate together to form the resultant system. Typically, some of the devices are supplied with the computer system initially, such as the central processing unit, and some devices can be installed into the computer system after the initial configuration of the system. The devices of the computer system are generally coupled together via interconnects which may be of several types, such as a serial bus.
Serial buses are well known in the art. A recently developed serial bus standard is the so-called IEEE 1394 serial bus standard, based largely upon the internationally adopted ISO/IEC 13213 (ANSI/IEEE 1212) CSR Architecture Specification and the IEEE 1394-1995 Serial Bus Specification, the teachings of which are herein incorporated by these references. A typical serial bus having an IEEE 1394 standard architecture is comprised of a multiplicity of nodes that are interconnected via point-to-point links, such as cables, that each connect a single node of the serial bus to another node of the serial bus. The nodes themselves are addressable entities which can be independently reset and identified. Nodes are associated with respective components of the computer system and serve as interfaces between the components and the communications links. Nodes are logical entities, each with a unique address. In a preferred implementation, each node provides a so-called configuration ROM (read-only memory)xe2x80x94hereinafter referred to as configuration memoryxe2x80x94and a standardized set of control registers that can be accessed by software residing within the computer system.
The configuration memory of a given node provides, in part, a description of the functional capabilities of that node. The configuration memory for each node residing on the serial bus is exposed to all other nodes. During a configuration process, other nodes access each node""s configuration memory (a process often referred to as xe2x80x9cenumeratingxe2x80x9d) in order to determine the proper system configuration. Thus, one function of the configuration memory of a given node is to instruct other nodes as to the given node""s functional capabilities, thereby allowing the other nodes to determine which device drivers to load. As known in the art, for a general computer system having a number of devices, each device has an associated driver that, among other functions, configures the device and allows the device to be operable within the overall system. Drivers are typically software instructions that can be loaded into the computer""s memory and, when executed, will communicate with the device to properly configure the device for operation. The driver may initialize the device so that the device can function and the driver may also allow the device to communicate within the overall system.
The information provided in configuration memory is typically treated as static as evidenced, for example, by the use of the xe2x80x9cread-only memoryxe2x80x9d terminology used in the IEEE 1394 standard. A technique that allows a configuration memory to be changed such that a 1394 device node may dynamically emulate new device capabilities is not currently known in the art. However, such a technique would offer significant advantages over the prior art.
The present invention provides a technique for altering the information contained in a configuration memory, thereby providing greater flexibility in adding or sharing functionality in a computer-based system. The information stored in the configuration memory of a device coupled to a communication bus is exposed to and used by other devices to ascertain the functionality of the device. Preferably, the device is either integrated within, or coupled to, a computer platform, such as a personal computer (PC). A device driver corresponding to the device can, through an interface, cause a bus driver to alter the contents of a node""s configuration memory thereby changing what information is exposed to other devices. When another node xe2x80x9cenumeratesxe2x80x9d the now-altered node, the other node will learn of the new functionality and proceed in a normal fashion by loading those drivers necessary to use the newly-added functionality. Conversely, when a device and its corresponding device driver is removed, the node""s configuration memory is updated accordingly.
In one embodiment of the present, invention, any PC coupled via an IEEE 1394 standard compliant serial bus to one or more 1394-compliant devices could be used to emulate the functionality of virtually any 1394-compliant device. In turn, this emulation capability allows developers to simulate device/peripheral functionality during development. In another embodiment of the present invention, peripherals coupled to the xe2x80x9cemulatingxe2x80x9d PC but not otherwise available via the serial bus can be exposed to other devices coupled to the PC via the serial bus. For example, a PC having a Digital Video Disc (DVD) drive coupled thereto can emulate to other 1394 nodes that it is a DVD drive, thereby allowing the other 1394 nodes to access the DVD drive functionality.